package com.example.futureai.config;

import com.example.futureai.config.propertise.DashScopePropertiseConfig;
import com.example.futureai.config.propertise.OpenAiPropertiseConfig;
import com.knuddels.jtokkit.api.EncodingType;
import org.springframework.ai.embedding.BatchingStrategy;
import org.springframework.ai.embedding.TokenCountBatchingStrategy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName: OpenChatConfig
 * @Description:
 * @Author: YourName
 * @Date: 2025/2/24
 */

@Configuration
public class OpenChatConfig {

    @Autowired
    private OpenAiPropertiseConfig opc;

    @Autowired
    private DashScopePropertiseConfig dpc;

//    @Bean("myOpenAiEmbeddingModel")
//    public OpenAiEmbeddingModel embeddingModel() {
//        return new OpenAiEmbeddingModel(
//                // embeddingApiKey 为阿里百炼上申请的 api-key 。
//                new OpenAiApi(dpc.getBaseUrl(), dpc.getApiKey()),
//                MetadataMode.EMBED,
//                OpenAiEmbeddingOptions.builder()
//                        .model("text-embedding-v3")  // 选用的嵌入模型
//                        .dimensions(1024)            // 向量维度
//                        .build(),
//                RetryUtils.DEFAULT_RETRY_TEMPLATE);
//    }

//    @Bean("myChatModel")
//    public OpenAiChatModel chatModel() {
//        return new OpenAiChatModel(new OpenAiApi(opc.getBaseUrl(), opc.getApiKey()), OpenAiChatOptions.builder()
//                .model("deepseek-chat")    // 选用的聊天模型
//                .temperature(0.7d)         //
//                .build());
//    }

    @Bean("myBatchingStrategy")
    public BatchingStrategy tokenCountBatchingStrategy() {
        return new TokenCountBatchingStrategy(
                EncodingType.CL100K_BASE,  // 指定用于分词的编码类型
                8000,                      // 最大 Token 数量
                0.1                        // 设置预留百分比（默认 10%）
        );
    }
}
